package com.yidu.action;


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yidu.common.JsonMsg;
import com.yidu.common.Pages;
import com.yidu.common.Tools;
import com.yidu.domain.ListenBackstageUser;
import com.yidu.domain.ListenFinance;
import com.yidu.domain.ListenPurchase;
import com.yidu.domain.ListenPurchaseDetail;
import com.yidu.domain.ListenQualityTesting;
import com.yidu.domain.ListenSell;
import com.yidu.service.ListenPurchaseService;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.print.attribute.HashAttributeSet;
import javax.servlet.http.HttpSession;

import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Controller;

/**
 * @title 采购订单Controller类 
 * @author 刘武
 * @dateTime 2019年1月14日
 */
@Controller
@RequestMapping("/listenPurchase")
public class ListenPurchaseController {
	@Resource
	ListenPurchaseService purchaseService;
	
	/**
	 * 显示采购订单
	 * @param purchase 订单对象
	 * @param session 用户信息
	 * @return Map对象
	 */
	@RequestMapping("findAll")
	@ResponseBody
	public Map<String,Object> findAll(ListenPurchase purchase,HttpSession session){
		//判断获取过来的分页是否为空
		if(purchase.getPage()!=null && purchase.getLimit()!=null) {
			//新建一个工具类
			Pages page=new Pages();
			//工具类当前行数
			page.setCurPage(purchase.getPage());
			//工具类每页最大显示条数
			page.setMaxResult(purchase.getLimit());
			//采购对象开始的行数
			purchase.setFirstRows(page.getFirstRows());
			//采购对象最大显示条数
			purchase.setMaxResult(page.getMaxResult());
		}
		//取到登录的用户信息
		ListenBackstageUser users=(ListenBackstageUser) session.getAttribute("user");
		//判断用户信息为否为空
		if(users!=null) {
			//判断用户站点是否为空
			if(!Tools.isEmpty(users.getSite())) {
				//赋值给公司id
				purchase.setCompanyId(users.getSite());
			}
		}
		//new 一个map对象
		Map<String,Object> map=new HashMap<>();
		//判断前台传过来的开始时间是否为空
		if(!Tools.isEmpty(purchase.getPurDateStart())) {
			purchase.setPurDateStart(purchase.getPurDateStart()+" 00:00:00");
		}
		//判断前台转过来的结束时间是否为空
		if(!Tools.isEmpty(purchase.getPurDateEnd())) {
			purchase.setPurDateEnd(purchase.getPurDateEnd()+" 23:59:59");
		}
		//显示采购订单页面的方法
		List<ListenPurchase> list=purchaseService.findAll(purchase);
		//显示的行数
		int rows=purchaseService.findRows(purchase);
		map.put("code", 0);
		map.put("msg", "");
		map.put("count",rows);
		//将list放入map中
		map.put("data", list);

		return map;
		
	}

	/**
	 * 通过采购id查询销售id
	 * @param sell 销售对象
	 * @return 采购集合
	 */
	@RequestMapping("findSellId")
	@ResponseBody
	public List<ListenPurchase>  findSellId(ListenSell sell){
		List<ListenPurchase> purchases=purchaseService.findSellId(sell);
		return purchases;
	}
	/**
	 * 增加到销售订单
	 * @param purchaseId 采购id
	 * @param session 登陆页面用户信息
	 * @return 工具类
	 */
	@RequestMapping("/addSell")
	@ResponseBody
	public JsonMsg addSell(String purchaseId,HttpSession session){
		//获取JsonMsg工具类
		JsonMsg jsonMsg=new JsonMsg();
		//调用增加到销售的方法
		int rows=purchaseService.addSell(purchaseId,session);
		//判断是否增加成功
		if(rows>0) {
			jsonMsg.setDatas(1);
			jsonMsg.setMsg("增加成功");
		}else {
			jsonMsg.setDatas(2);
			jsonMsg.setMsg("增加失败");
		}
		return jsonMsg;
	}
	
	/**
	 * 显示分公司质检
	 * @param qualityTesting 质检对象
	 * @param session 登录页面取得session
	 * @return  Map对象
	 */
	@RequestMapping("/findQualityTesting")
	@ResponseBody
	public Map<String,Object> findQualityTesting(ListenQualityTesting qualityTesting,HttpSession session ){
		//取到登录的用户信息
		ListenBackstageUser users=(ListenBackstageUser) session.getAttribute("user");
		//new 一个map
		Map<String, Object> map=new HashMap<>();
		//判断用户对象是否为空
		if(users!=null) {
			//判断用户站点是否为空
			if(!Tools.isEmpty(users.getSite())) {
				map.put("companyId", users.getSite());
			}
		}
		//判断质检类型
		if(qualityTesting.getQtType()!=null) {
			map.put("qtType", qualityTesting.getQtType());
		}
		//判断前台传过来的公司名是否为空
		if(!Tools.isEmpty(qualityTesting.getCompanyName())) {
			map.put("companyName", qualityTesting.getCompanyName());
		}
		//判断前台传过来的开始时间是否为空
		if(!Tools.isEmpty(qualityTesting.getStartTime())) {
			map.put("startTime", qualityTesting.getStartTime()+" 00:00:00");
		}
		//判断前台传过来的结束时间是否为空
		if(!Tools.isEmpty(qualityTesting.getEndTime())) {
			map.put("endTime", qualityTesting.getEndTime()+" 23:59:59");
		}
		//判断获取过来的分页是否为空
		if(qualityTesting.getPage()!=null && qualityTesting.getLimit()!=null) {
			//新建一个工具类
			Pages page=new Pages();
			//工具类当前行数
			page.setCurPage(qualityTesting.getPage());
			//工具类每页最大显示条数
			page.setMaxResult(qualityTesting.getLimit());
			//赋值给map开始的行数
			map.put("firstRows", page.getFirstRows());
			//赋值给map最大显示条数
			map.put("maxResult", page.getMaxResult());
		}
		//显示分公司质检
		List<ListenQualityTesting> list=purchaseService.findQualityAll(map);
		//显示分公司质检行数
		int rows=purchaseService.findQualityRows(map);
		//new 一个map
		Map<String, Object> maps=new HashMap<>();
		maps.put("code", 0);
		maps.put("msg", "");
		maps.put("count",rows);
		maps.put("data", list);
		//返回map
		return maps;
		
	}
	
	/**
	 * 增加到质检
	 * @param purchaserString 字符串
	 * @param session 登录用户的信息
	 * @return 工具类
	 */
	@RequestMapping("/addQuality")
	@ResponseBody
	public JsonMsg addQuality(String purchaserString,HttpSession session){
		//获取JsonMsg工具类
		JsonMsg jsonMsg=new JsonMsg();
		//调用增加到质检的方法
		int rows=purchaseService.addQuality(purchaserString,session);
		//判断是否增加成功
		if(rows>0) {
			jsonMsg.setDatas(1);
			jsonMsg.setMsg("增加成功");
		}else {
			jsonMsg.setDatas(2);
			jsonMsg.setMsg("增加失败");
		}
		//返回工具类
		return jsonMsg;
	}
	/**
	 * 入库
	 * @param qtId 质检id
	 * @param vocationalWorkId 业务id
	 * @param session 登录用户的信息
	 * @return 工具类
	 */
	@RequestMapping("/addStock")
	@ResponseBody
	public JsonMsg addStock(String qtId,String vocationalWorkId,HttpSession session){
		//获取JsonMsg工具类
		JsonMsg jsonMsg=new JsonMsg();
		//调用入库的方法
		int rows=purchaseService.addStock(qtId,vocationalWorkId,session);
		//判断是否入库成功
		if(rows>0) {
			jsonMsg.setDatas(1);
			jsonMsg.setMsg("入库成功");
		}else {
			jsonMsg.setDatas(2);
			jsonMsg.setMsg("入库失败");
		}
		//返回工具类
		return jsonMsg;
	}
	/**
	 * 分店采购乐器审核
	 * @param purchase 采购对象
	 * @return Map对象
	 */
	@RequestMapping("selectMusicState")
	@ResponseBody
	public Map<String,Object> selectMusicState(ListenPurchase purchase,HttpSession session ){
		//取到登录的用户信息
		ListenBackstageUser users=(ListenBackstageUser) session.getAttribute("user");
		//判断用户对象是否为空
		if(users!=null) {
			//判断用户站点是否为空
			if(!Tools.isEmpty(users.getSite())) {
				//赋值给采购的公司id
				purchase.setCompanyId(users.getSite());
			}
		}
		//判断获取过来的分页是否为空
		if(purchase.getPage()!=null && purchase.getLimit()!=null) {
			//新建一个工具类
			Pages page=new Pages();
			//工具类当前行数
			page.setCurPage(purchase.getPage());
			//工具类每页最大显示条数
			page.setMaxResult(purchase.getLimit());
			//采购对象开始的行数
			purchase.setFirstRows(page.getFirstRows());
			//采购对象最大显示条数
			purchase.setMaxResult(page.getMaxResult());
		}
		//新建一个map对象
		Map<String,Object> map=new HashMap<>();
		//判断前台传过来的开始时间是否为空
		if(!Tools.isEmpty(purchase.getPurDateStart())) {
			purchase.setPurDateStart(purchase.getPurDateStart()+" 00:00:00");
		}
		//判断前台转过来的结束时间是否为空
		if(!Tools.isEmpty(purchase.getPurDateEnd())) {
			purchase.setPurDateEnd(purchase.getPurDateEnd()+" 23:59:59");
		}
		//显示分公司采购乐器审核的方法
		List<ListenPurchase> list=purchaseService.findMusicState(purchase);
		//显示分公司采购乐器审核行数的方法
		int rows=purchaseService.findMusicStateRows(purchase);
		
		map.put("code", 0);
		map.put("msg", "");
		map.put("count",rows);
		map.put("data", list);
		//返回一个map对象
		return map;
		
	}
	/**
	 * 分店总经理采购乐器审核
	 * @param purchase 采购对象
	 * @return Map对象
	 */
	@RequestMapping("selectManagerMusicState")
	@ResponseBody
	public Map<String,Object> selectManagerMusicState(ListenPurchase purchase,HttpSession session ){
		//取到登录的用户信息
		ListenBackstageUser users=(ListenBackstageUser) session.getAttribute("user");
		//判断用户对象是否为空
		if(users!=null) {
			//判断用户站点是否为空
			if(!Tools.isEmpty(users.getSite())) {
				//赋值给采购的公司id
				purchase.setCompanyId(users.getSite());
			}
		}//判断获取过来的分页是否为空
		if(purchase.getPage()!=null && purchase.getLimit()!=null) {
			//新建一个工具类
			Pages page=new Pages();
			//工具类当前行数
			page.setCurPage(purchase.getPage());
			//工具类每页最大显示条数
			page.setMaxResult(purchase.getLimit());
			//采购对象开始的行数
			purchase.setFirstRows(page.getFirstRows());
			//采购对象最大显示条数
			purchase.setMaxResult(page.getMaxResult());
		}
		//new 一个map对象
		Map<String,Object> map=new HashMap<>();
		//判断前台传过来的开始时间是否为空
		if(!Tools.isEmpty(purchase.getPurDateStart())) {
			purchase.setPurDateStart(purchase.getPurDateStart()+" 00:00:00");
		}
		//判断前台转过来的结束时间是否为空
		if(!Tools.isEmpty(purchase.getPurDateEnd())) {
			purchase.setPurDateEnd(purchase.getPurDateEnd()+" 23:59:59");
		}
		//查询分店总经理采购乐器审核的方法
		List<ListenPurchase> list=purchaseService.findManagerState(purchase);
		//查询分店总经理采购乐器审核行数的方法
		int rows=purchaseService.findManagerStateRows(purchase);
		
		map.put("code", 0);
		map.put("msg", "");
		map.put("count",rows);
		map.put("data", list);
		//返回map
		return map;
		
	}
	/**
	 * 删除
	 * @param purchase 订单对象
	 * @return int类型
	 */
	@RequestMapping("delete")
	@ResponseBody
	public int delete(ListenPurchase purchase){
		int rows=purchaseService.delete(purchase);
		return rows;
	}
	
	/**
	 * 采购乐器增加
	 * @param musicPurchase 采购字符串
	 * @param musicPurchaseDetail 采购详情字符串
	 * @param session 登录进来的用户信息
	 * @return int 类型
	 */
	@RequestMapping("/addMusicPurchase")
	@ResponseBody
	public JsonMsg addMusicPurchase(String musicPurchase,String musicPurchaseDetail,HttpSession session){
		//获取JsonMsg工具类
		JsonMsg jsonMsg=new JsonMsg();
		//调用采购乐器增加的方法
		int rows=purchaseService.addMusicPurchase(musicPurchase,musicPurchaseDetail,session);
		//判断是否增加成功
		if(rows>0) {
			jsonMsg.setDatas(1);
			jsonMsg.setMsg("采购成功");
		}else {
			jsonMsg.setDatas(2);
			jsonMsg.setMsg("采购失败");
		}
		//返回jsonMsg工具类
		return jsonMsg;
	}
	
	/**
	 * 修改乐器
	 * @param musicPurchase 采购字符串
	 * @param musicPurchaseDetail 采购详情字符串
	 * @param purId 订单id
	 * @param session session
	 * @param updateType 修改状态
	 * @return int 类型
	 */
	@RequestMapping("updateMusicPurchase")
	@ResponseBody
	public JsonMsg updateMusicPurchase(String musicPurchase,String musicPurchaseDetail,String purId,String updateType,HttpSession session){
		//获取JsonMsg工具类
		JsonMsg jsonMsg=new JsonMsg();
		//调用采购修改乐器的方法
		int rows=purchaseService.updateMusicPurchase(musicPurchase,musicPurchaseDetail,purId,updateType,session);
		//判断是否修改成功
		if(rows>0) {
			jsonMsg.setDatas(1);
			jsonMsg.setMsg("修改成功");
		}else {
			jsonMsg.setDatas(2);
			jsonMsg.setMsg("修改失败");
		}
		//返回jsonMsg工具类
		return jsonMsg;
	}
	/**
	 * 修改采购订单的状态
	 * @param purchase 采购对象
	 * @param session session
	 * @return 工具类
	 */
	@RequestMapping("updatePurchaseState")
	@ResponseBody
	public JsonMsg updatePurchaseState(ListenPurchase purchase,HttpSession session) {
		//取到登录的用户信息
		ListenBackstageUser users=(ListenBackstageUser) session.getAttribute("user");
		//判断用户名是否为空
		if(!Tools.isEmpty(users.getBuName())) {
			//赋值操作人
			purchase.setOper(users.getBuName());
		}
		//修改订单状态
		int rows = purchaseService.updateState(purchase);
		//得到Json
		JsonMsg msg = new JsonMsg();
		if(rows>0) {
			//给Json赋值
			msg.setMsg("审核成功");
			msg.setDatas(0);
		}else {
			//给Json赋值
			msg.setMsg("审核失败");
			msg.setDatas(1);
		}
		//返回json到前台页面
		return msg;
	}
	/**
	 * 通过公司id查询公司财务
	 * @param session 登录用户的个人区间
	 * @return 返回公司财务对象
	 */
	@RequestMapping("findFinanceByCompanyId")
	@ResponseBody
	public ListenFinance findFinanceByCompanyId(HttpSession session) {
		//取到登录的用户信息
		ListenBackstageUser users=(ListenBackstageUser) session.getAttribute("user");
		//定义个公司财务对象
		ListenFinance finance=null;
		//判断用户名是否为空
		if(users!=null) {
			//判断用户名站点是否为空
			if(!Tools.isEmpty(users.getSite())) {
				 //存在用户站点则调用查询公司财务的方法
				 finance=purchaseService.findFinanceByCompanyId(users.getSite());
			}
		}
		return finance;
	}
	/**
	 * 查看库存数量
	 * @param listenPurchase 采购对象
	 * @return 工具类
	 */
	@RequestMapping("findByStockNumber")
	@ResponseBody
	public JsonMsg findByStockNumber(ListenPurchase listenPurchase) {
		System.err.println("进入订单查看库存");
		//定义一个数量
		int muNumber = 0;
		//定义一个库存数量
		int stockNumber = 0;
		//得到一个Json
		JsonMsg msg = new JsonMsg();
		//根据采购ID查询库存得到订单集合
		List<ListenPurchase> list = purchaseService.findByMusicalNumber(listenPurchase.getPurchaseId());
		//遍历List集合得到一个采购对象
		for (ListenPurchase listenPurchase2 : list) {
			//给定义的数量赋值
			muNumber=listenPurchase2.getPdNumber();
			//给定义的库存数量赋值
			stockNumber=listenPurchase2.getStockNumber();
			//如果商品数量大于库存数量
			if(muNumber>stockNumber) {
				//给json赋值
				msg.setDatas(0);
				msg.setMsg("有一个或多个商品库存不足！");
				//返回json到页面上
				return msg;
			}else {
				//给json赋值
				msg.setDatas(1);
				msg.setMsg("库存足够");
				//返回json到页面上
				return msg;
			}
		}
		
		return null;
	}
	/**
	 * @title 采购材料增加
	 * @param ListenPurchase
	 * @return int
	 * @author 江宇
	 * @dateTime 2018年12月7日
	 * @versions 1.0
	 */
	@RequestMapping("addUpdateMaterialPurchase")
	@ResponseBody
	public int addUpdateMaterialPurchase(String purchase,String purchaseDateil,String purchaseId,HttpSession session){
		int rows=purchaseService.addUpdateMaterialPurchase(purchase,purchaseDateil,purchaseId,session);
		return rows;
	}
	
	
	/**
	 * @title 显示材料采购订单
	 * @param ListenPurchase
	 * @return Map
	 * @author 江宇
	 * @dateTime 2018年12月10日
	 * @versions 1.0
	 */
	@RequestMapping("materialFindAll")
	@ResponseBody
	public Map<String,Object> materialFindAll(ListenPurchase pur){
		Map<String,Object> map=new HashMap<>();
		//如果供应商ID不为空赋值
		if(!Tools.isEmpty(pur.getSupplierId())) {
			map.put("supplierId", pur.getSupplierId());
		}
		//如果开始时间不为空赋值
		if(!Tools.isEmpty(pur.getPurDateStart())) {
			map.put("startTime", pur.getPurDateStart());
		}
		//如果审核状态不为空赋值
		if(pur.getAuditingStatus()!=null) {
			map.put("auditingStatus", pur.getAuditingStatus());
		}
		//如果结束时间不为空赋值
		if(!Tools.isEmpty(pur.getPurDateEnd())) {
			map.put("endTime", pur.getPurDateEnd());
		}
		//如果未审核状态不为空赋值
		if(!Tools.isEmpty(pur.getNoAuditingStatus())) {
			map.put("noAuditingStatus", pur.getNoAuditingStatus());
		}
		//如果前台传来的页数和行数不不为空赋值
		if(pur.getPage()!=null && pur.getLimit()!=null) {
			Pages page=new Pages();
			page.setCurPage(pur.getPage());
			page.setMaxResult(pur.getLimit());
			
			map.put("firstRows", page.getFirstRows());
			map.put("maxResult", page.getMaxResult());
		}
		//调用显示材料采购订单的方法
		List<ListenPurchase> list=purchaseService.materialFindAll(map);
		//创建采购订单的Listt集合
		List<ListenPurchase> purList=new ArrayList<>();
		//循环查询出来的材料采购订单List集合
		for (ListenPurchase listenPurchase : list) {
			//创建材料采购订单的类对象
			ListenPurchase pur2=new ListenPurchase();
			//赋值
			BeanUtils.copyProperties(listenPurchase, pur2);
			//时间转换
			pur2.setPurchaseStringTime(Tools.SDF_TIME.format(listenPurchase.getPurchaseTime()));
			purList.add(pur2);
		}
		//调用显示材料采购订单行数的方法
		int rows=purchaseService.materialFindRows(map);
		
		Map<String,Object> layUiMap=new HashMap<>();
		layUiMap.put("code", 0);
		layUiMap.put("msg", "");
		layUiMap.put("count",rows);
		layUiMap.put("data", purList);

		return layUiMap;
		
	}
	
	/**
	 * 
	 * @title 根据ID查询材料采购
	 * @param String
	 * @return ListenPurchase
	 * @author 江宇
	 * @dateTime 2018年12月10日
	 * @versions 1.0
	 */
	@RequestMapping("selectPurchaseId")
	@ResponseBody
	public ListenPurchase selectPurchaseId(String purchaseId){

		return purchaseService.selectPurchaseId(purchaseId);
		
	}
	
	/**
	 * @title 删除采购原材料和采购原材料明细 
	 * @param String
	 * @return int
	 * @author 江宇
	 * @dateTime 2018年12月11日
	 * @versions 1.0
	 */
	@RequestMapping("deleteMateria")
	@ResponseBody
	public int deleteMateria(String purchaseId){

		return purchaseService.deleteMateria(purchaseId);
		
	}
}

